package cn.wolfcode.mapper;

import cn.wolfcode.domain.Employee;
import cn.wolfcode.domain.Role;
import cn.wolfcode.qo.EmployeeQueryObject;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 员工
 */
public interface EmployeeMapper {


    /**
     * 根据条件查询所有员工
     *
     * @param qo
     * @return
     */
    List<Employee> selectAllByQO(EmployeeQueryObject qo);


    /**
     * 查询所有员工的数量
     *
     * @return
     */
    int count();

    /**
     * 查询所有员工
     *
     * @return
     */
    List<Employee> selectAll();

    /**
     * 根据id删除
     *
     * @param id
     */
    void delete(Long id);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    Employee selectById(Long id);

    /**
     * 更新员工
     *
     * @param employee
     */
    void update(Employee employee);

    /**
     * 新增员工
     *
     * @param employee
     */
    void insert(Employee employee);

    /**
     * 添加员工与角色的关系
     *
     * @param eid
     * @param rid
     */
    void insertRelation(@Param("eid") Long eid, @Param("rid") Long rid);


    /**
     * 删除员工的角色
     *
     * @param eid
     */
    void deleteRelation(Long eid);

    /**
     * 根据用户名和密码查询员工
     *
     * @param username
     * @param password
     * @return
     */
    Employee selectByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

    /**
     * 检测密码是否正确
     *
     * @param id
     * @param oldPassword
     * @return
     */
    Employee checkedPassword(@Param("id") Long id, @Param("oldPassword") String oldPassword);

    /**
     * 更新密码
     *
     * @param id
     * @param newPassword
     */
    void updatePwd(@Param("id") Long id, @Param("newPassword") String newPassword);

    /**
     * 更改用户状态
     *
     * @param id
     */
    void updateStatus(Long id);

    /**
     * 根据用户名查询用户
     *
     * @param name
     * @return
     */
    Employee selectByName(String name);

    /**
     * 批量删除
     *
     * @param ids
     */
    void batchDelete(Long[] ids);

    List<Employee> selectByRoleSn(String[] sns);
}
